package com.wangdong.mijiqiqi.threetype;

import android.view.View;

import com.wangdong.mijiqiqi.threetype.presenter.BaseNetView;
import com.wangdong.mijiqiqi.threetype.presenter.DataBasePresenter;
import com.wangdong.mijiqiqi.threetype.presenter.ShowDataContract;
import com.wangdong.mijiqiqi.threetype.presenter.StateContract;


/**
 * 作者：wangdong on 2018/10/19 18:08
 * 邮箱：2100520956@qq.com
 *
 * 这一层是处理1.加载网络布局
 *              2.网络访问层
 *              的粘合
 */

public abstract  class BaseThreeActivity<T> extends BaseActivity
        implements ShowDataContract<T> {//这个接口欧继承了BaseView接口中一个方法setPresenter并增加了两个方法showdata和showError

    private StateContract.StateView mView;//处理有数据显示,没有数据和断网显示布局问题的类
    protected DataBasePresenter<T> groupPresenter;

    /**
     * 拦截下层设置布局
     * 需要处理在一下,让BaseNetView把layoutResID处理一下,BaseNetView就是处理布局中没有数据和没有网络和有数据时候的显示问题
     *
     * 然后把BaseNetView处理完的通过getRootView()方法返回的布局设置给setContentView()
     * 并把BaseNetView返回来 保留
     *
     *          说明一下BaseNetView类是继承StateContract类下内部两个接口StateView,和SatePresenter
     *                                  StateView中处理 showLadstatusI(int state)加载状态
     *                                                  getChildRootView()
     *                                                  getRootView()
     *                                                  setOnInterceptDisplay(boolean ONInter)
     *                                  satePresenter接口是继承BasePresenter总接口
     *                                              方法有updateData();
     *
     * */
    @Override
    public void setContentView(final int layoutResID) {
        mView = new BaseNetView(this){

            @Override
            public View getChildRootView() {
                return getChildView(layoutResID);//加载显示布局
            }

            @Override
            public void showLoadStatus(int state) {
                super.showLoadStatus(state);
                showLoadState(state);//显示状态返回
            }
        };

        super.setContentView(mView.getRootView());
    }
    //把layoutResID加载成View
    protected View getChildView(int layoutResID) {
        return View.inflate(this, layoutResID, null);

    }
    protected final StateContract.StateView getStateView() {
        return mView;
    }
    //返回的显示状态
    protected void showLoadState(int state) {
    }
    @Override
    protected void initView() {
        groupPresenter = new DataBasePresenter<T>(this, getStateView(), this) {
        };
//        groupPresenter.getData(getRequest(), getUrl(), getApi());
    }

    protected abstract Class getApi();//加载网络时候返回Javabean类

    protected abstract PageRequest getRequest();//请求类

    protected abstract String getUrl();//加载需要返回加载数据url


}
